# プロジェクト7 Bluetooth リモートコントロール **説明** Bluetooth は、シンプルなワイヤレス通信モジュールであり、ここ数十年で急速に普及し、その使いやすい機能により、ほとんどのバッテリー駆動デバイスで使用されています。 ![](media/image-20250908161056017.png) 過去数年間、顧客の需要を満たし、技術の発展に対応し、時代のトレンドに従うため、Bluetooth 標準の多くのアップグレードが行われてきました。 ここ数年で、データ伝送速度、ウェアラブルおよび IoT デバイスの消費電力、セキュリティシステムなど、多くのことが変わってきました。 ここでは、Arduino ボードと HM-10 BLE 4.0 について学習します。HM-10 は、容易に入手できる Bluetooth 4.0 モジュールです。このモジュールはワイヤレスデータ通信の確立に使用されます。このモジュールは、Texas Instruments CC2540 または CC2541 Bluetooth Low Energy (BLE) System on Chip (SoC) を使用して設計されています。 **仕様** - Bluetooth プロトコル: Bluetooth Specification V4.0 BLE。 - シリアルポート送受信でのバイト制限なし。 - オープン環境では、iPhone4s との 100m 超長距離通信を実現。 - 動作周波数: 2.4GHz ISM バンド。 - 変調方式: GFSK (ガウス周波数シフトキーイング)。 - 送信電力: -23dbm、-6dbm、0dbm、6dbm、AT コマンドで変更可能。 - 感度: 0.1% BER で ≤-84dBm。 - 伝送速度: 非同期: 6K バイト; 同期: 6K バイト。 - セキュリティ機能: 認証と暗号化。 - サポートサービス: Central & Peripheral UUID FFE0、FFE1。 - 消費電力: 自動スリープモード、スタンバイ電流 400uA~800uA、送信時 8.5mA。 - 電源: 5V DC。 - 動作温度: -5~+65 摂氏度。 **コンポーネント** ![](media/image-20250908161515087.png) **接続図** **1. STATE:** *状態テストピン、内部 LED に接続、通常は接続しないままにします。* **2. RXD:** *シリアルインターフェース、受信端子。* **3. TXD:** *シリアルインターフェース、送信端子。* **4. GND:** *グラウンド。* **5. VCC:** *電源の正極。* **6. EN/BRK:** *接続を切断、Bluetooth 接続を切断することを意味し、通常は接続しないままにします。* ![](media/image-20250908161703926.png) **テストコード** ```c /* keyestudio Mini Tank Robot V2.1 lesson 7.1 bluetooth http://www.keyestudio.com */ char ble_val; // 文字変数: Bluetooth 受信値を保存 void setup() { Serial.begin(9600); } void loop() { if(Serial.available() > 0) // シリアルバッファにデータがあるか確認 { ble_val = Serial.read(); // シリアルバッファからデータを読み込み Serial.println(ble_val); // 印字 } } //******************************************* ``` (コードのアップロード時、シリアル通信とBluetooth通信の間に矛盾が生じる可能性があります。したがって、コードをアップロードする前に Bluetooth モジュールをリンクしないでください。) 開発ボードにコードをアップロードした後、Bluetooth モジュールを挿入し、携帯電話からのコマンドを待ちます。 **APP のダウンロード** このコードは受信した信号を読み込むためのものであり、信号を送信するツールも必要です。このプロジェクトでは、携帯電話を介してロボットカーを制御するための信号を送信します。 その後、APP をダウンロードする必要があります。 **iOS システム** **注: Bluetooth モジュールに接続する際、携帯電話の設定で APP に「位置情報」へのアクセスを許可してください。そうしないと、Bluetooth が接続されない可能性があります。** APP STORE に入り、**BLE Scanner 4.0 を検索してダウンロードしてください。** ![](media/image-20250908162043691.png) **Android システム** ここから APP をダウンロードしてください。 **また、APP に「位置情報」へのアクセスを許可してください。携帯電話の設定で「位置情報」を有効にできます。** ![](media/image-20250909115039773.png) ![](media/image-20250908162115901.png) 1. インストール後、App を開き、「位置情報と Bluetooth」の権限を有効にします。 2. iOS バージョンを例として説明します。Android バージョンの操作方法はほぼ同じです。 3. Bluetooth モジュールをスキャンして Bluetooth BLE 4.0 を取得します。その名前は HMSoft です。その後、「接続」をクリックして Bluetooth とリンクし、使用します。 ![](media/image-20250908162157692.png) 4. HMSoft に接続した後、それをクリックして、デバイス情報、アクセス権限、一般、カスタムサービスなど、複数のオプションを取得します。「カスタムサービス」を選択します。 ![](media/image-20250908162224719.png) 5. その後、以下のページがポップアップします。 ![](media/image-20250908162314786.png) 6. (Read、Notify、WriteWithoutResponse) をクリックして、以下のページに入ります。 ![](media/image-20250908162335862.png) 7. **Write Value をクリックすると、HEX またはテキストを入力するインターフェースが表示されます。** ![](media/image-20250908162354140.png) 8. Arduino のシリアルモニターを開き、テキストインターフェースで 0 または他の文字を入力します。 ![](media/image-20250908162413278.png) 9. その後、「Write」をクリックし、シリアルモニターを開いて「0」信号があるか確認します。 ![](media/image-20250908162441251.png) **コード説明** **Serial.available()** : バッファ領域に戻る現在の残り文字。一般に、この関数はバッファにデータがあるかどうかを判定するために使用されます。Serial.available() > 0 の場合、シリアルがデータを受信し、読み込むことができることを意味します。 **Serial.read():** シリアルポートのバッファから 1 バイトのデータを読み込みます。例えば、デバイスがシリアルポート経由で Arduino にデータを送信する場合、「Serial.read()」でデータを読み込むことができます。 **拡張練習** 携帯電話を介してコマンドを送信して、LED をオンおよびオフにすることができます。 D10 は LED に接続されており、以下のように示されています: ![](media/image-20250908162550263.png) **コード説明** **Serial.available()** : バッファ領域に戻る現在の残り文字。一般に、この関数はバッファにデータがあるかどうかを判定するために使用されます。Serial.available() > 0 の場合、シリアルがデータを受信し、読み込むことができることを意味します。 **Serial.read():** シリアルポートのバッファから 1 バイトのデータを読み込みます。例えば、デバイスがシリアルポート経由で Arduino にデータを送信する場合、「Serial.read()」でデータを読み込むことができます。 **拡張練習** 携帯電話を介してコマンドを送信して、LED をオンおよびオフにすることができます。 D10 は LED に接続されており、以下のように示されています: ![](media/image-20250908162720671.png) ```c /* keyestudio Mini Tank Robot V2.1 lesson 7.2 Bluetooth http://www.keyestudio.com */ int ledpin=11; void setup() {Serial.begin(9600); pinMode(ledpin,OUTPUT); } void loop() { int i; if (Serial.available()) {i=Serial.read(); Serial.println("DATA RECEIVED:"); if(i=='1') { digitalWrite(ledpin,1); Serial.println("led on"); } if(i=='0') { digitalWrite(ledpin,0); Serial.println("led off"); } } }//******************************************* ``` ![](media/image-20250908162739769.png) ![](media/image-20250908162747210.png) APP で「Write」をクリックし、1 を入力すると LED がオンになります。0 を入力すると LED がオフになります。(実験終了後、Bluetooth モジュールを取り外すことを忘れずに。そうしないと、コード書き込みに影響が出ます)。